package date0703pm;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC 处理事务的步骤:
 * 1、关闭自动提交 : connection.setAutoCommit( false );
 *    设置事务隔离级别: connection.setTransactionIsolation( level ) ;
 *    注意: 在 Oracle 环境下设置事务隔离级别必须是事务开始时
 * 2、提交或回滚事务:
 *    2.1、提交事务: connection.commit();
 *    2.2、回滚事务: connection.rollabck();
 * 3、启用自动提交: connection.setAutoCommit( true );
 */
public class JdbcTest19 {

	public static void main(String[] args) throws Exception {
		
		String driverClassName = "oracle.jdbc.driver.OracleDriver"  ;
		String url = "jdbc:oracle:thin:@localhost:1521:ecut" ;
		String user = "ecuter" ;
		String password = "ecuter" ;
		
//		String driverClassName = "com.mysql.cj.jdbc.Driver"  ;
//		String url = "jdbc:mysql://localhost:3306/ecut?serverTimezone=Asia/Shanghai&useSSL=false" ;
//		String user = "ecuter" ;
//		String password = "ecuter" ;
		
		// 1、加载数据库驱动
		Class.forName( driverClassName );
		
		// 2、获得数据库连接
		Connection connection = DriverManager.getConnection( url , user , password );
		
		// 设置事务的隔离级别 ( 在 Oracle 环境下设置事务隔离级别必须是事务开始时 )
		connection.setTransactionIsolation( Connection.TRANSACTION_READ_COMMITTED ); // 设置隔离级别
		
		// 【事务处理第一步】关闭自动提交
		connection.setAutoCommit( false ); 
		
		// 3、创建 Statement 对象
		Statement statement = connection.createStatement();
		
		
		try {
			// 4、执行 DML语句
			int count = statement.executeUpdate( "" ); // SQLException
			// 5、处理结果
			System.out.println( count );
			// 【事务处理第二步】提交事务 (与提交事务是互斥操作)
			connection.commit(); // SQLException
		} catch ( SQLException e ) {
			// 【事务处理第二步】回滚事务 (与提交事务是互斥操作)
			connection.rollback();
		}
		
		// 【事务处理第三步】启用自动提交
		connection.setAutoCommit( true );
		
		// 6、释放资源( 所有已经开启的资源必须都关闭 )
		statement.close();
		connection.close();

	}

}
